package com.qfmy.common.utils;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @ClassName: CommonUtils
 * @author： zhengjt
 * @data： 2022/8/20 18:03
 * @version：1.0
 * @描述： 通用工具类，用以存放不好区分的方法工具类
 */
public class CommonUtils {

    public static void main(String[] args) {
        String str = getConfigValue("TEST.TEXT");
        System.out.println(str);

//        System.out.println(getVerCodeNum(6));
//        System.out.println(getVerCodeMixed(4));
    }

    /**
     * 读取配置文件信息，仅能读取properties文件
     * @param key   需要的参数key
     * @return  key对应的参数
     */
    public static String getConfigValue(String key){
        ResourceBundle bundle = ResourceBundle.getBundle("config.config");
        String result = "";
        try {
            //  中文乱码处理
            result = new String(bundle.getString(key).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        }catch (Exception e){
            result = bundle.getString(key);
        }
        return result;
    }

    /**
     * 读取配置文件信息，仅能读取properties文件
     * @param key   需要的参数key
     * @param fileName  需要的读取的文件名称，不包含后缀名，但需要包含前置文件夹；
     *                  例如： config.properties文件在config文件夹下，则传入的文件名即为：config.config；
     *                          如果，test.properties文件在resources文件夹下，那么需要传入的参数就是 test。
     * @return  key对应的参数
     */
    public static String getConfigValue(String key, String fileName){
        ResourceBundle bundle = ResourceBundle.getBundle(fileName);
        String result = "";
        try {
            //  中文乱码处理
            result = new String(bundle.getString(key).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        }catch (Exception e){
            result = bundle.getString(key);
        }
        return result;
    }

    /**
     * 获取 无 "-" 的 UUID字符串
     * @return
     */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 生成随机数
     * @return 生成随机数
     */
    public static String getRandom(){
        int random = new Random().nextInt(1000);
        return Integer.toString(random);
    }

    /**
     * 获取数字验证码
     * @param length    验证码长度
     * @return  验证码
     */
    public static String getVerCodeNum(Integer length){
        ThreadLocalRandom localRandom = ThreadLocalRandom.current();
        StringBuilder codeSb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            codeSb.append(localRandom.nextInt(0, 9));
        }
        return codeSb.toString();
    }

    /**
     * 获取英文验证码
     * @param length    长度
     * @return  验证码
     */
    public static String getVerCodeEN(Integer length){
        String allCode = "abcdefghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        return createCode(allCode, length);
    }

    /**
     * 获取数字英文混合验证码
     * @param length    长度
     * @return  验证码
     */
    public static String getVerCodeMixed(Integer length){
        String allCode = "0123456789abcdefghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        return createCode(allCode, length);
    }

    /**
     * 生成验证码
     * @param allCode   需要生成的所有数据字符串
     * @param length    长度
     * @return  验证码
     */
    private static String createCode(String allCode, Integer length){
        Random random = new Random();
        StringBuilder codeSb = new StringBuilder();
        int randomNextLength = allCode.length();
        for (int i = 0; i < length; i++){
            codeSb.append(allCode.charAt(random.nextInt(randomNextLength)));
        }
        return codeSb.toString();
    }



}
